
package com.mazaiting.common.core.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 使用正则表达式进行表单验证
 */
public class RegexValidateUtil {


    /**
     * 正则校验
     *
     * @param str   待校验的字符串
     * @param regex 正则表达式
     * @return true: 匹配成功; false: 匹配失败
     */
    public static boolean check(String str, String regex) {
        boolean flag = false;
        try {
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(str);
            flag = matcher.matches();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }

    /**
     * 验证URL /manager/sysUser/user/2
     *
     * @param url /manager/sysUser/user/2
     */
    public static boolean checkUrl(String url) {
        String regex = "^(/([a-z]|[A-Z])*)*/[0-9]";
        return check(url, regex);
    }

    /**
     * 验证URL /manager/sysUser/user?username=pkq&roleId=2
     *
     * @param url /manager/sysUser/user?username=pkq&roleId=2
     */
    public static boolean checkPostUrl(String url) {
//        String regex = "^(/([a-z]|[A-Z])*)*[?]";
        String regex = "^(/([a-z]|[A-Z])*)*[?](([a-z]|[A-Z]|[0-9]|=)*(|&)*)*";
        return check(url, regex);
    }

    /**
     * 验证邮箱
     *
     * @param email 邮箱
     * @return
     */
    public static boolean checkEmail(String email) {
        String regex = "^\\w+[-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$ ";
        return check(email, regex);
    }

    /**
     * 验证手机号码
     * <p>
     * 移动号码段:139、138、137、136、135、134、150、151、152、157、158、159、182、183、187、188、147
     * 联通号码段:130、131、132、136、185、186、145
     * 电信号码段:133、153、180、189
     *
     * @param cellphone
     * @return
     */
    public static boolean checkCellphone(String cellphone) {
//        String regex = "^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\\d{8}$";
        String regex = "^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$";
        return check(cellphone, regex);
    }

    /**
     * 验证固话号码
     *
     * @param telephone 手机号码
     * @return
     */
    public static boolean checkTelephone(String telephone) {
        String regex = "^(0\\d{2}-\\d{8}(-\\d{1,4})?)|(0\\d{3}-\\d{7,8}(-\\d{1,4})?)$";
        return check(telephone, regex);
    }

    /**
     * 验证传真号码
     *
     * @param fax 传真
     * @return
     */
    public static boolean checkFax(String fax) {
        String regex = "^(0\\d{2}-\\d{8}(-\\d{1,4})?)|(0\\d{3}-\\d{7,8}(-\\d{1,4})?)$";
        return check(fax, regex);
    }

    /**
     * 验证QQ号码
     *
     * @param qq qq 号
     * @return
     */
    public static boolean checkQQ(String qq) {
        String regex = "^[1-9][0-9]{4,} $";
        return check(qq, regex);
    }

    /**
     * 去除空格
     *
     * @param param 去除空格
     * @return
     */
    public static boolean checkBland(String param) {
        String regex = "(\\S)+";
        return check(param, regex);
    }

    /**
     * 密码(以字母开头，长度在6~18之间，只能包含字母、数字和下划线)：^[a-zA-Z]\w{5,17}$
     *
     * @param param 密码
     * @return 返回是否符合要求
     */
    public static boolean checkPassword(String param) {
        String regex = "^[a-zA-Z]\\w{5,17}$";
        return check(param, regex);
    }
}
